package org.linlinjava.litemall.admin.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 认证上下文持有者，用于在同一线程中传递额外参数
 */
public class AuthContextHolder {
    
    private static final ThreadLocal<String> EXTRA_VALUE_HOLDER = new ThreadLocal<>();
    private static final ThreadLocal<Map<String, Object>> CONTEXT_HOLDER = new ThreadLocal<>();
    
    /**
     * 设置额外参数（兼容原有方法）
     */
    public static void setExtraValue(String extraValue) {
        EXTRA_VALUE_HOLDER.set(extraValue);
    }
    
    /**
     * 获取额外参数（兼容原有方法）
     */
    public static String getExtraValue() {
        return EXTRA_VALUE_HOLDER.get();
    }
    
    /**
     * 设置上下文参数
     */
    public static void setContext(String key, Object value) {
        Map<String, Object> context = CONTEXT_HOLDER.get();
        if (context == null) {
            context = new HashMap<>();
            CONTEXT_HOLDER.set(context);
        }
        context.put(key, value);
    }
    
    /**
     * 获取上下文参数
     */
    public static Object getContext(String key) {
        Map<String, Object> context = CONTEXT_HOLDER.get();
        return context != null ? context.get(key) : null;
    }
    
    /**
     * 获取上下文参数（指定类型）
     */
    @SuppressWarnings("unchecked")
    public static <T> T getContext(String key, Class<T> type) {
        Object value = getContext(key);
        return value != null ? (T) value : null;
    }
    
    /**
     * 获取所有上下文参数
     */
    public static Map<String, Object> getAllContext() {
        return CONTEXT_HOLDER.get();
    }
    
    /**
     * 清空上下文（重要：防止内存泄漏）
     */
    public static void clear() {
        EXTRA_VALUE_HOLDER.remove();
        CONTEXT_HOLDER.remove();
    }
    
    // 常用的上下文键常量
    public static final String CAPTCHA = "captcha";
    public static final String DEVICE_ID = "deviceId";
    public static final String IP_ADDRESS = "ipAddress";
    public static final String USER_AGENT = "userAgent";
} 